import { createRouter, createWebHistory } from 'vue-router'
import { staticRoutes } from '@/router/routes'
// 引入store
import { centerStore } from '@/stores/center'
import pinia from '@/stores'
const userInfoStore = centerStore(pinia)

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: staticRoutes,
  scrollBehavior() {
    return { top: 0, left: 0 }
  }
})

// // 增强路由
// const methods = ['push', 'replace']

// methods.forEach((method) => {
//   const origin = createRouter.prototype[method]

//   createRouter.prototype[method] = function (location, onComplete, onAbort) {
//     if (onComplete || onAbort) {
//       origin.call(this, location, onComplete, onAbort)
//     } else {
//       origin.call(this, location, () => {})
//     }
//   }
// })

// 进行token检查的白名单路径数组
const whiteList = ['/center', '/shopcart']
// 全局路由前置守卫
router.beforeEach(async (to, from, next) => {
  const token = localStorage.getItem('token_key')
  // 如果token存在(已经登陆或前面登陆过)
  if (token) {
    const userInfo = userInfoStore.userInfo
    // 如果存在户信息，并且用户信息中存在 id，说明存在用户信息
    if (userInfo && userInfo.id) {
      // 用户登录了，又存在用户信息，直接放行即可
      next()
    } else {
      try {
        // 尝试获取用户信息
        await userInfoStore.getUserInfo()
        next()
      } catch (error) {
        // 获取用户信息失败，说明 token 已经过期
        // 既然 token 过期，需要进行移除、再跳转到登录页面重新进行登录
        localStorage.removeItem('token_key')
        next('/login')
      }
    }
  } else {
    // 没有token
    // 如果目标路径在白名单中(是不需要token的路径)
    if (whiteList.includes(to.path)) {
      next('/login')
    } else {
      // 如果不是敏感路由（交易路由页面），则放行
      next()
    }
  }
})

export default router
